package com;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringEncoder;

/**
 * @author 罗俊华
 * @date 2021/8/24 - 6:10 下午
 */
public class HelloClient {

    public static void main(String[] args) throws InterruptedException {
        new Bootstrap()
//                1、配置客户端的 eventGroup
                .group(new NioEventLoopGroup())
//                2、配置客户端的 channel 类型，注意不是服务端的 NioServerSocketChannel
                .channel(NioSocketChannel.class)
//                3、添加处理器
                .handler(new ChannelInitializer<NioSocketChannel>() {

                    /**
                     * 4、该方法在连接建立后被调用
                     * @param ch
                     * @throws Exception
                     */
                    @Override
                    protected void initChannel(NioSocketChannel ch) throws Exception {
                        // 5、添加编码器，用于将客户端发送的 String 字符串编码为 ByteBuf，然后再发送到 server
                        ch.pipeline().addLast(
//                                9、编码器收到client发送的数据，现将其编码为 ByteBuf 以放到网络中进行传输
                                new StringEncoder()
                        );
                    }

                })
//                4、连接到服务器
                .connect("localhost", 9092)
                .sync()   //   6、同步，阻塞方法，直到连接建立成功之后才会发送数据
                .channel()  // 7、连接建立成功之后获取到 channel 对象，指 SocketChannel 对象
//                8、向服务器发送数据
                .writeAndFlush("hello,zhangsan");

    }
}
